package es.nadalgoyo.frikiquest.bbdd.tablas;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import es.nadalgoyo.frikiquest.vo.PuntuacionesVO;
import es.sergionadal.mvc.bbdd.tablas.Tabla;
import es.sergionadal.mvc.vo.CampoVO;

public class TablaPuntuaciones extends Tabla {

	public static final String NOMBRE = "nombre";

	public static final String TIPO = "tipo";

	public static final String PUNTUACION = "puntuacion";

	private PuntuacionesVO puntos;

	public TablaPuntuaciones() {
		super("frikipuntuaciones");
	}

	@Override
	protected List<CampoVO> getCamposChild() {
		List<CampoVO> campos = new ArrayList<CampoVO>();
		campos.add(getId());
		campos.add(new CampoVO(NOMBRE, CampoVO.TEXT));
		campos.add(new CampoVO(PUNTUACION, CampoVO.INTEGER));
		campos.add(new CampoVO(TIPO, CampoVO.TEXT));
		return campos;
	}

	@Override
	public long insert(SQLiteDatabase db) {
		ContentValues nuevoRegistro = new ContentValues();
		long result = -1;

		nuevoRegistro.putNull(ID);
		nuevoRegistro.put(NOMBRE, puntos.getNombre());
		nuevoRegistro.put(TIPO, puntos.getTipo());
		nuevoRegistro.put(PUNTUACION, puntos.getPuntuacion());

		result = db.insertWithOnConflict(getName(), null, nuevoRegistro,
				SQLiteDatabase.CONFLICT_REPLACE);
		return result;

	}

	public List<PuntuacionesVO> getTopTen(SQLiteDatabase db, String tipo) {
		StringBuffer sb = new StringBuffer();

		sb.append("SELECT * FROM ".concat(getName()).concat(" "));
		sb.append("WHERE ".concat(TIPO).concat(" ='").concat(tipo).concat("' "));
		sb.append("ORDER BY ".concat(PUNTUACION).concat(" DESC LIMIT 10"));

		Cursor cursor = db.rawQuery(sb.toString(), null);

		List<PuntuacionesVO> puntos = new ArrayList<PuntuacionesVO>();
		if (cursor.moveToFirst()) {
			do {
				puntos.add(new PuntuacionesVO(cursor.getString(1), cursor
						.getString(3), cursor.getInt(2)));
			} while (cursor.moveToNext());
		}

		if (cursor != null && !cursor.isClosed()) {
			cursor.close();
		}
		return puntos;
	}

	@Override
	public CampoVO getId() {
		return new CampoVO(ID, CampoVO.INTEGER,
				CampoVO.CONSTRAINT_PK_AUTOINCREMENT);
	}

	public void setPuntuacion(PuntuacionesVO puntos) {
		this.puntos = puntos;
	}

	@Override
	public void update(SQLiteDatabase db, String[] args) {
		return;

	}

}
